# -*- coding: utf-8 -*-
from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.orm import relationship, backref
import db  
from datetime import date
from user import User
import cherrypy
from circle_preview import CirclePreviewController
from index import template
import auth

class Anketa(db.Base):

    __tablename__ = 'anketa'

    id = Column(Integer, primary_key=True)
    username = Column(String, ForeignKey('users.username'))

    lastname = Column(String)
    firstname = Column(String)
    school = Column(String)
    grade = Column(Integer)
    city = Column(String)
    year = Column(String)

    email = Column(String)
    ICQ = Column(String)
    jabber = Column(String)
    vkontakte = Column(String)
    skype = Column(String)
    mobile = Column(String)
    contacter = Column(String)

    experience = Column(String)
    langs = Column(String)
    best_langs = Column(String)
    whowhere = Column(String)
    olymp_inf = Column(String)
    olymp_math = Column(String)

    circle_ids = Column(String)
    circle_number = Column(String)
    day_time = Column(String)
    whatelse = Column(String)

    user = relationship("User", backref=backref('anketa', order_by=year))


    def __str__(self):
        return "</td><td>".join([str(self.id),self.username or '', self.lastname or '', self.firstname  or '',
                         self.school  or '', str(self.grade), self.school or '', self.year or '',
                         self.email or '', self.ICQ or '', self.jabber or '', self.vkontakte or '', self.skype or '',
                         self.mobile or '', self.contacter or '', self.experience or '', self.langs or '', self.best_langs or '',
                         self.whowhere or '', self.olymp_inf or '', self.olymp_math or '',
                         self.circle_ids or '', self.circle_number or '', self.day_time or '',
                         self.whatelse or ''])

class AnketaController(object):
    @cherrypy.expose
    def view(self):
        if auth.member_of('admin')():     
            result1 = ['<b>Cписок анкет</b><br><table border="1">',
                       '<tr><td>Записан</td><td>N</td><td>id</td><td></td><td>Фамилия</td><td>Имя</td><td>Класс</td><td>Школа</td><td>Город</td><td>Год заполнения</td><td>E-mail</td><td>ICQ</td><td>Jabber</td><td>vkontakte</td><td>skype</td><td>моб.телефон</td><td>Контактное лицо</td><td>опыт</td><td>языки</td><td>осн.языки</td><td>научил</td><td>Олимпиады по информатике</td><td>олимпиады по математике</td><td>Кружки (предварительно)</td><td>кол-во</td><td>удобное время</td><td>чего не хватает?</td><tr>']
            result2 = []
            count = 1
            for row in db.session.query(Anketa).all(): 
                if row.lastname:
                    result1 += ['<tr><td>' + ", ".join(map(str,[a.id for a in row.circle])) + '</td><td>' + str(count) + '</td><td>' +str(row) + '</td></tr>']
                    count += 1
                else:
                    result2 += ['<tr><td>' + str(row) + '</td></tr>']
            result1 += '</table>'
            return template("".join(result1))
        else:
            raise cherrypy.HTTPRedirect("/")            

    @cherrypy.expose
    def save(self, **args):
        if db.SESSION_KEY in cherrypy.session.keys() and cherrypy.session[db.SESSION_KEY]:
            ank =  db.session.query(User).get(cherrypy.session[db.SESSION_KEY]).anketa[-1]
            (ank.lastname, ank.firstname, ank.grade, ank.school, 
            ank.city, ank.year, ank.email, ank.ICQ, ank.jabber, 
            ank.vkontakte, ank.skype, ank.mobile, ank.contacter, 
            ank.experience, ank.langs, ank.best_langs, ank.whowhere, 
            ank.olymp_inf, ank.olymp_math, ank.circle_ids, ank.circle_number,
            ank.day_time, ank.whatelse) = (args['lastname'], args['firstname'], int(args['grade']), args['school'], 
            args['city'], args['year'], args['email'], args['ICQ'], args['jabber'], 
            args['vkontakte'], args['skype'], args['mobile'], args['contacter'], 
            args['experience'], args['langs'], args['best_langs'], args['whowhere'], 
            args['olymp_inf'], args['olymp_math'], 
            '', '', '', ''
            #args['circle_ids'], args['circle_number'],args['day_time'], args['whatelse']
            )        
            db.session.commit()
        raise cherrypy.HTTPRedirect('/')


    @cherrypy.expose
    def edit(self):
        if db.SESSION_KEY in cherrypy.session.keys() and cherrypy.session[db.SESSION_KEY]:
            ank =  db.session.query(User).get(cherrypy.session[db.SESSION_KEY]).anketa[-1]
            return template(self.form(ank))                
        else:
            raise cherrypy.HTTPRedirect('/login')

    def form(self, ank):
        selected = [''] * 13
        if not ank.grade:
            ank.grade = 0
        selected[ank.grade] = 'selected'
        grade_string = ['<option value="' + str(i) + '" ' + selected[i] + '>' + str(i) + '</option>' for i in range(0,12)]
        return '''
<font face = 'Verdana'>
    <form action='/anketa/save' method='POST'>
    <input name='id' type='hidden' value='{0}'> 
    <h3>Личные данные</h3>
    Фамилия: <input name='lastname' type='text' size='40' value='{1}'> 
    <br>Имя: <input name='firstname' type='text' size='40' value='{2}'> 
    <br>Класс: <select name='grade'> {3}
               </select> 
    <br>Школа: <input name='school' type='text' size='40' value='{4}'> 
    <br>Город, где расположена школа: <input name='city' type='text' size='40' value='{5}'> 
    <input type='hidden' name='year' value='{6}'>
    
    <h3>Контакты (укажите те, которыми вы реально пользуетесь; необходимо указать хотя бы один):</h3>
    E-mail: <input name='email' type='text' size='40' value='{7}'> 
    <br>ICQ: <input name='ICQ' type='text' size='10' value='{8}'> 
    <br>Jabber: <input name='jabber' type='text' size='40' value='{9}'> 
    <br>Вконтакте: <input name='vkontakte' type='text' size='40' value='{10}'> 
    <br>Skype: <input name='skype' type='text' size='40' value='{11}'> 
    <br>Моб.телефон: <input name='mobile' type='text' size='20' value='{12}'> 
    <br>Если указаны координаты не школьника, а взрослого (родителя, ...), укажите ФИО контактного лица:
        <input name='contacter' type='text' size='60' value='{13}'> 

    <h3>Опыт программирования:</h3>
    Сколько лет вы занимаетеcь программированием: <input name='experience' type='text' size='20' value='{14}'> 
    <br>На каких языках вы пишите: <input name='langs' type='text' size='60' value='{15}'> 
    <br>Какими языками вы владеете хорошо: <input name='best_langs' type='text' size='20' value='{16}'> 
    <br>Кто и где учил вас программированию: <input name='whowhere' type='text' size='60' value='{17}'> 
    <br>Участие и успехи в олимпиадах по программированию: <input name='olymp_inf' type='text' size='80' value='{18}'> 
    <br>Участие и успехи в олимпиадах по математике: <input name='olymp_math' type='text' size='80' value='{19}'> 

    <br><input type='submit' value='Отправить анкету'> 
</form>
'''.format(ank.id, ank.lastname or '', ank.firstname or '', grade_string, ank.school or '', 
            ank.city or '', ank.year or '', ank.email or '', ank.ICQ or '',ank.jabber  or '', 
            ank.vkontakte  or '', ank.skype  or '', ank.mobile  or '', ank.contacter  or '', 
            ank.experience  or '', ank.langs  or '',ank.best_langs  or '', ank.whowhere  or '', 
            ank.olymp_inf  or '', ank.olymp_math  or '')

#db.Base.metadata.create_all(db.engine) #create table
